/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sapra.abc;

import nextapp.echo2.app.Table;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import nextapp.echo2.app.Alignment;
import nextapp.echo2.app.Border;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.CheckBox;
import nextapp.echo2.app.Color;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Font;
import nextapp.echo2.app.Grid;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.SelectField;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.TextField;
import nextapp.echo2.app.WindowPane;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.filetransfer.UploadEvent;
import nextapp.echo2.app.filetransfer.UploadListener;
import nextapp.echo2.app.filetransfer.UploadSelect;
import nextapp.echo2.app.list.DefaultListModel;
import nextapp.echo2.app.table.DefaultTableModel;
import nextapp.echo2.extras.app.AccordionPane;
import nextapp.echo2.extras.app.layout.AccordionPaneLayoutData;
import org.sapra.dao.Aseguradora;
import org.sapra.dao.Banco;
import org.sapra.dao.Colonia;
import org.sapra.dao.Direccion;
import org.sapra.dao.Empresa;
import org.sapra.dao.Esquemapagopracticante;
import org.sapra.dao.GpoEmpresas;
import org.sapra.dep.CalendarioFacturacion;
import org.sapra.dep.conexion.DAC_Ext;
import org.sapra.dep.conexion.DAC_Insert;
import org.sapra.dep.echo.CambioFecha.CambioFecha;
import org.sapra.echo.Helpers;
import org.sapra.echo.wAviso;
import org.sapra.logon.dLogin;
import org.sapra.main.vPrincipal;



/**
 * Generated Echo form template
 *
 * @author ppratsc
 */
public class vEmpresa extends nextapp.echo2.app.ContentPane {

    private vPrincipal princ;
    public vEmpresa(vPrincipal princ){
        super();
        this.princ=princ;
        initComponents();
    }

    private SelectField mLista;
    private Empresa mCurrent;
    private boolean edit = false;

    //Campos de la Empresa
    private TextField mNombre;
    private TextField mRazon;
    private TextField mNumSocio;
    private TextField mNumCliente;
    private TextField mRFC;
    private TextField mComision;
    private CheckBox mOpenTerm;
    private CheckBox mAhorro;
    private CheckBox mSuspendida;
    private CheckBox mSeguroAbierto;
    private CheckBox mNotificaciones;
    private CheckBox mSeguro;
    private SelectField mSelBanco;
    private SelectField mSelGpoEmpresas;
    private SelectField mSelAseguradora;
    private vDireccion mDireccion;
    private SelectField esquemaPago;
    //CALENDARIOS DE FACTURACION
    private UploadSelect cargar;
    private Button fecFact;
    private WindowPane FechaFactW;
    // Botones
    private Button mbNuevo;
    private Button mbEditar;
    private Button mbCancelar;
    private Button mbCalen;
    private Row rowl,row1,row2,row3,row4,row5,row6;
    private Grid ac;

    //Calendarios
   ArrayList<CalendarioFacturacion> listaFecha;


    void hidden(boolean opc){
        rowl.setVisible(opc);
        row1.setVisible(opc);
        row2.setVisible(opc);
        row3.setVisible(opc);
        row4.setVisible(opc);
        row5.setVisible(opc);
        row6.setVisible(opc);
        mDireccion.hidden(opc);
    }

    private void initComponents() {

        //Columna Principal
        Column col1 = Helpers.Column("Default", new Extent(5), this);


        col1.setInsets(new Insets(new Extent(210), new Extent(0), new Extent(210),new Extent(0)));
        Row x=new Row();
        x=princ.getMenu();
        x.setAlignment(Alignment.ALIGN_CENTER);
        col1.add(x);
        //Campos-Linea 1
        //Lista de Empresas
        Row rowh = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("Seleccionar una empresa:", Color.BLACK, rowh);
        //Helpers.SelectField(col1, new ActionListener(){public void actionPerformed(ActionEvent e) {Seleccion(e);}});
        mLista = Helpers.SelectField(col1, new ActionListener(){public void actionPerformed(ActionEvent e) {Seleccion(e);}});
        mLista.setWidth(new Extent(750));

        rowl = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("Detalle de la empresa:", Color.BLACK, rowl);

        row1 = Helpers.Row("Default", new Extent(5), col1);
        Grid grid1=new Grid(8);
        Helpers.Label("# SOCIO:", Color.BLACK, grid1);
        mNumSocio = Helpers.Text("", grid1);
        Helpers.Label("RFC:", Color.BLACK, grid1);
        mRFC = Helpers.Text("", grid1);

        //Campos-Linea 2
        row2 = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("RAZON COMERCIAL:", Color.BLACK, grid1);
        mNombre = Helpers.Text("", grid1);
        Helpers.Label("RAZON SOCIAL:", Color.BLACK, grid1);
        mRazon = Helpers.Text("", grid1);
        grid1.setInsets(new Insets(6));
        row1.add(grid1);

        Grid grid2=new Grid(8);
        Helpers.Label("Esquema Pago :", Color.BLACK, grid2);
        esquemaPago = Helpers.SelectField(grid2,null);

        //Campos-Linea 3
        row3 = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("Gasto Administrativo:", Color.BLACK, grid2);
        mComision = Helpers.Text("10.00", grid2);
        Helpers.Label("Banco:", Color.BLACK, grid2);
        mSelBanco = Helpers.SelectField(grid2,null);
        mSelBanco.setSelectedIndex(0);
        Helpers.Label("Aseguradora: ", Color.BLACK, grid2);
        mSelAseguradora=Helpers.SelectField(grid2, null);
        mSelAseguradora.setWidth(new Extent(120));
        mSelAseguradora.setSelectedIndex(0);
        mSelAseguradora.setEnabled(false);
        grid2.setInsets(new Insets(5));
        row2.add(grid2);

        //Campos Linea 4
        row4 = Helpers.Row("Default", new Extent(5), col1);
        mSeguro = Helpers.CheckBox("Seguro de Practicantes",row4);

        //mSeguroAbierto = Helpers.CheckBox("Seguro Abierto",row4);
        mAhorro = Helpers.CheckBox("Ahorro",row4);
        mOpenTerm = Helpers.CheckBox("Fecha de Termino Abierta",row4);
        mNotificaciones = Helpers.CheckBox("Notificaciones",row4);
        mSuspendida = Helpers.CheckBox("Suspendida",row4);

         row4.setAlignment(Alignment.ALIGN_CENTER);
        //Campos Linea 5
        row5 = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("Grupo de Empresas:", Color.BLACK, row5);
        mSelGpoEmpresas = Helpers.SelectField(row5,null);
        //mSelGpoEmpresas.setWidth(new Extent(880));

        //cargar calendarios
        row6=Helpers.Row("Default", new Extent(5), col1);
        row6=new Row();
        row6.setAlignment(Alignment.ALIGN_CENTER);
        row6.setCellSpacing(new Extent(10));
        ac=new Grid(1);
        Helpers.Label("Cargar calendarios de facturacion.", Color.BLACK, ac);
        cargar=new UploadSelect();
        fecFact= Helpers.Button2("VER FECHAS", new ActionListener(){public void actionPerformed(ActionEvent e) {verFechas(e);}});
        ac.add(cargar);
        row6.add(ac);
        row6.add(fecFact);
        try{
        cargar.addUploadListener(new UploadListener() {

                public void fileUpload(UploadEvent uploadEvent) {
                    try {
                            String fechaStr;
                            listaFecha =new ArrayList<CalendarioFacturacion>();

                            String nameFile=uploadEvent.getFileName();
                             byte[] b = new byte[uploadEvent.getSize()];
                             uploadEvent.getInputStream().read(b, 0, uploadEvent.getSize());
                             String path=setContent(b);
                             File f=new File(path);
                             FileOutputStream outputStream = new FileOutputStream(f);
                             outputStream.write(b);
                             outputStream.close();
                             BufferedReader r=new BufferedReader(new FileReader(f));
                             r.readLine();
/*
                             File f=new File(nameFile);
                             f.createNewFile();
                             FileOutputStream outputStream = new FileOutputStream(f);
                             outputStream.write(b);
                             outputStream.close();
                             BufferedReader r=new BufferedReader(new FileReader(f));*/
                             r.readLine();
                             while(true){
                                 fechaStr=r.readLine();
                                 if (fechaStr == null)
                                        break;
                                  listado(fechaStr);
                             }

                             r.close();
                             f.delete();
                             f.deleteOnExit();




                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

                public void invalidFileUpload(UploadEvent uploadEvent) {
                    try {
                        listaFecha =new ArrayList<CalendarioFacturacion>();
                        
                    } catch (Exception e) {
                    }

                }
            }


        );}catch(Exception e){
                
            }




        //Campos de Direccion
        mDireccion = new vDireccion(col1);
        col1.add(row6);



       Column col_b=new Column();
       mbCalen = Helpers.Button2("CALENDARIO", new ActionListener(){public void actionPerformed(ActionEvent e) {MenuCalendario(e);}});
       mbNuevo = Helpers.Button2("NUEVO", new ActionListener(){public void actionPerformed(ActionEvent e) {MenuNuevo(e);}});
       mbEditar = Helpers.Button2("EDITAR", new ActionListener(){public void actionPerformed(ActionEvent e) {MenuEditar(e);}});
       mbCancelar = Helpers.Button2("CANCELAR", new ActionListener(){public void actionPerformed(ActionEvent e) {MenuCancelar(e);}});
       col_b.add(mbNuevo);
       col_b.add(mbEditar);
       col_b.add(mbCalen);
       col_b.add(mbCancelar);

       col_b.setCellSpacing(new Extent(5));
       col_b.setInsets(new Insets(new Extent(10)));
        longitud();

        //creacion del acordionpane
        AccordionPane ac=new AccordionPane();
        AccordionPaneLayoutData layoutdata=new AccordionPaneLayoutData();
        layoutdata.setTitle("OPCIONES");

        col_b.setLayoutData(layoutdata);
        AccordionPaneLayoutData layoutData2 = new AccordionPaneLayoutData();
        //layoutData2.setTitle("SALIR");
        //Button salir=new Button("");
        //salir.setLayoutData(layoutData2);
        ac.add(col_b);
        //ac.add(salir);

        //agregar el accordionpane a una ventana
        WindowPane ven=Helpers.Window("MENU DE EMPRESAS");
        ven.setHeight(new Extent(300));
        ven.setWidth(new Extent(185));
        ven.setPositionY(new Extent(40));
        ven.setPositionX(new Extent(5));
        ven.setClosable(false);
        ven.add(ac);

        add(ven);
        //BLOQUE DE CODIGO PARA CREAR EL ACORDEON PANE
      
        FirstTime();
        hidden(false);
    }

    void FirstTime(){
        UpdateView();
        
    }
    public String setContent(byte[] content) throws IOException {
        File tmpFile = File.createTempFile(String.valueOf(System
                .currentTimeMillis()), null);
        // Ejecuta correctamente y borra archivos cuando la aplicación se denga...
        tmpFile.deleteOnExit();
        String path = tmpFile.getCanonicalPath();
        FileOutputStream outputStream = new FileOutputStream(tmpFile);
        outputStream.write(content);
        outputStream.close();
        return path;
    }

    void UpdateView(){

        UpdateList(0);
 
        //Catalogo de Banco
        List<Banco> bancos = dEmpresa.getBancos();
        mSelBanco.setModel(new DefaultListModel(bancos.toArray()));
        List<Aseguradora> aseguradoras=dEmpresa.getAseguradora();
        mSelAseguradora.setModel(new DefaultListModel(aseguradoras.toArray()));

        List<Esquemapagopracticante> esquema=dEmpresa.getEsquemaPago();
        esquemaPago.setModel(new DefaultListModel(esquema.toArray()));
        //Catalogo de Grupos de Empresas
        List<GpoEmpresas> gpos = dEmpresa.getGpoEmpresas();
        mSelGpoEmpresas.setModel(new DefaultListModel(gpos.toArray()));

        //No se puede modificar ningun campo
        SetEdit(false);

        //Reset del Status de los Botones
        edit = false;
        mbEditar.setText("EDITAR");
        mbEditar.setVisible(false);
        mbNuevo.setText("NUEVO");
        mbNuevo.setVisible(true);
        mbCancelar.setVisible(false);
        mbCalen.setVisible(false);
        mAhorro.setVisible(false);

        //Limpia los Campos
        CleanFields();

        return;
    }

    void MenuCalendario(ActionEvent e){
       WindowPane wp =Helpers.Window("CALENDARIO");
      
       wp.setHeight(new Extent(510));
       wp.setWidth(new Extent(950));
       wp.setMovable(false);
       wp.setResizable(false);
       wp.setClosable(true);
       
       wp.add(new CambioFecha(1,mCurrent.getEmpresaId()));
       add(wp);

    }


    void MenuCancelar(ActionEvent e){
        UpdateView();
        UpdateList(0);
        hidden(false);
    }

    void MenuNuevo(ActionEvent e){
        hidden(true);
        if(edit){
            
            // Valida los Campos
            
            // Obtiene la Direccion
           String opc=validar();
            if(opc!=null){
                add(new wAviso("ERROR",opc));
                return;
            }
            int dir = mDireccion.SaveDireccion(edit);
            if(dir == -1){
                add(new wAviso("ERROR","Direccion Incorrecta"));
                return;
            }
            
            // Inserta el Nuevo Registro en la DB
            Empresa emp = getFields(); // Obtiene los Campos
            emp.setEmpresaId(-1); // Indica que es un registro Nuevo
            emp.setFk_direccionId(dir); // Asigna la Direccion
            int empid = dEmpresa.Save(emp);
            guardarFechas(empid);
            emp.setEmpresaId(empid);
            mCurrent=emp;
            if(empid == -1){
                add(new wAviso("ERROR","Error al Guardar la Empresa"));
                return;
            }else{
                add(new wAviso("Alta Exitosa","El Registro se ha guardado correctamente"));
            }

            //TODO: Aqui no debe de limpiarlos, si no que debe de seleccionar el nuevo registro.
            mCurrent=null;
            UpdateList(0);
            CleanFields();
            hidden(false);
            princ.UpdateView();

        }else {
            UpdateList(0);
            CleanFields();
        }
        
        // Nuevo Registro
        mbEditar.setVisible(edit);
        mbCancelar.setVisible(!edit);
        mLista.setEnabled(edit);
        mbNuevo.setText((edit)?"NUEVO":"GUARDAR");
        SetEdit(!edit);

        edit = !edit; 
        // Prende/Apaga la Bandera
        if(edit){
            mCurrent=new Empresa();
            mCurrent.setEmpresaId(0);
        }
    }
    
    void MenuEditar(ActionEvent e){
        //Edita el Registro
  
        hidden(true);
        if(edit){

            // Valida los Cambios
            // Actualiza la DB
            // Valida los Campos

            // Obtiene la Direccion
            String opc=validar();
            if(opc!=null){
                add(new wAviso("ERROR",opc));
                return;
            }
            int dir = dDireccion.update(encapsulacion());
            if(dir == -1){
                add(new wAviso("ERROR","Direccion Incorrecta"));
                return;
            }

            // Inserta el Nuevo Registro en la DB
            Empresa emp = getFields(); // Obtiene los Campos
            emp.setFk_direccionId(dir);

            // Asigna la Direccion
            int empid = dEmpresa.Save(emp);
            try{
            guardarFechas(empid);}catch(Exception ex){
                add(new wAviso("Error","No se cargaron calendarios"));
            }

            if(empid == -1){
                add(new wAviso("ERROR","Error al Actualizar la Empresa"));
                return;
            }
            Aseguradora aseg = (Aseguradora) mSelAseguradora.getSelectedItem();
            dEmpresa.updateAsegEmpresa(emp.getEmpresaId(),aseg.getAseguradoraId());
            UpdateList(1);
        }
        mCurrent.getEmpresaId();
        mbNuevo.setVisible(edit);
        mbCancelar.setVisible(!edit);
        mbCalen.setVisible(!edit);
        mLista.setEnabled(edit);
        mbEditar.setText((edit)?"EDITAR":"GUARDAR");

        SetEdit(!edit);
        
        edit = !edit;

    }

    void Seleccion(ActionEvent e){

        mCurrent = (Empresa) mLista.getSelectedItem();
        if(mCurrent == null) return;
        mCurrent=dLogin.getEmpresa2(mCurrent.getEmpresaId());
        mNombre.setText(mCurrent.getRazon_empresa());
        mRazon.setText(mCurrent.getRazon_factura());
//        mNumCliente.setText(mCurrent.getNum_cliente());
        mNumSocio.setText(mCurrent.getNumeroSocio());
        mRFC.setText(mCurrent.getRfc());
        mComision.setText( Integer.toString(mCurrent.getPorcentaje_comision()) );
        mOpenTerm.setSelected(mCurrent.getFechaTerminoAbierta());
        mAhorro.setSelected(mCurrent.getTieneEsquemaAhorro());
        mSuspendida.setSelected(mCurrent.getSuspendida());
//        mSeguroAbierto.setSelected(mCurrent.getSeguroAbierto());
        mNotificaciones.setSelected(mCurrent.getNotificacionesPracticantes());
        mSeguro.setSelected(mCurrent.getPracticantes_seguro());

        mSelBanco.setSelectedItem(new Banco(mCurrent.getFk_bancoId()));
        esquemaPago.setSelectedIndex(mCurrent.getFk_esquemaPagoPracticanteId()-1);
        mSelGpoEmpresas.setSelectedItem(new GpoEmpresas(mCurrent.getFk_corporativoId()));

        mDireccion.SetDireccion(mCurrent.getFk_direccionId());
        mSelAseguradora.setSelectedItem(dEmpresa.ListAseguradoraEmpresa(mCurrent).get(0));

        mbEditar.setVisible(true);

     }

     void SetEdit(boolean edit){
        mNombre.setEnabled(edit);
        mRazon.setEnabled(edit);
        mNumSocio.setEnabled(edit);
//        mNumCliente.setEnabled(false);
        mRFC.setEnabled(edit);
        mComision.setEnabled(edit);
        mOpenTerm.setEnabled(edit);
        mAhorro.setEnabled(edit);
        mSuspendida.setEnabled(edit);
//        mSeguroAbierto.setEnabled(edit);
        mNotificaciones.setEnabled(edit);
        mSeguro.setEnabled(edit);
        mSelBanco.setEnabled(edit);
        mSelAseguradora.setEnabled(edit);
        mSelGpoEmpresas.setEnabled(edit);
        mDireccion.SetEdit(edit);
     }

     void CleanFields(){
        mNombre.setText("");
        mRazon.setText("");
        mNumSocio.setText("");
//        mNumCliente.setText("");
        mRFC.setText("");
        mComision.setText("");
        mOpenTerm.setSelected(false);
        mAhorro.setSelected(false);
        mSuspendida.setSelected(false);
//        mSeguroAbierto.setSelected(false);
        mNotificaciones.setSelected(false);
        mSeguro.setSelected(false);
        //mSelBanco.setSelectedIndex(-1);
        //mSelAseguradora.setSelectedIndex(-1);
        mSelGpoEmpresas.setSelectedIndex(-1);
        mDireccion.CleanFields();
     }

    private Empresa getFields() {
                
        Empresa resp = new Empresa();
        try {
            int x=mCurrent.getEmpresaId();
            resp.setEmpresaId(x);
        } catch (Exception e) {
            resp.setEmpresaId(0);
        }
        resp.setRazon_empresa(mNombre.getText());
        resp.setRazon_factura(mRazon.getText());
        resp.setNumeroSocio(mNumSocio.getText());
//        resp.setNum_cliente(mNumCliente.getText());
        resp.setRfc(mRFC.getText());
        resp.setPorcentaje_comision(Integer.parseInt(mComision.getText()));
        resp.setFechaTerminoAbierta(mOpenTerm.isSelected());
        resp.setTieneEsquemaAhorro(mAhorro.isSelected());
        resp.setSuspendida(mSuspendida.isSelected());
//        resp.setSeguroAbierto(mSeguroAbierto.isSelected());
        resp.setNotificacionesPracticantes(mNotificaciones.isSelected());
        resp.setPracticantes_seguro(mSeguro.isSelected());

        //Banco
        Banco banco = (Banco) mSelBanco.getSelectedItem();
        resp.setFk_bancoId((banco != null)?banco.getbancoId():-1);
        Esquemapagopracticante ep=(Esquemapagopracticante)esquemaPago.getSelectedItem();
        resp.setFk_esquemaPagoPracticanteId(ep.getEsquemaPagoPracticanteId());
        //Grupo de Empresas
        GpoEmpresas gpoemp = (GpoEmpresas) mSelGpoEmpresas.getSelectedItem();
        resp.setFk_corporativoId((gpoemp != null)?gpoemp.getcorporativoId():-1);

        return resp;
    }

    private void UpdateList(int opc) {
        //Actualiza la Lista
        List<Empresa> empresas = dEmpresa.getEmpresas(-1);
        mLista.setModel(new DefaultListModel(empresas.toArray()));
        mLista.setEnabled(true);
        mLista.setSelectedIndex(-1);
        if(opc==0)
            mCurrent = new Empresa();
    }
    public String validar(){
        String msj=null;
        String msj1="Formato Erroneo para ";
        String msj2="Debe ser Numerico";
        String msj3="Favor de Seleccionar un";
        String msj4="Favor de Llenar el campo";
        int ga=-1;
        try {
            mNumSocio.setText(Helpers.quitarAcento(mNumSocio.getText().trim()).trim());
            if(mNumSocio.getText().equals(""))return msj4+" Numero de Socio";
/*            try {
                Integer.parseInt(mNumCliente.getText());
            } catch (Exception e) {
                return msj1+"Numero de Cliente,"+msj2;
            }
*/
            mRFC.setText(Helpers.quitarAcento(mRFC.getText().trim()).trim());
            if(mRFC.getText().equals(""))return msj4+" RFC";
            
            mNombre.setText(Helpers.quitarAcento(mNombre.getText().trim()).trim());
            if(mNombre.getText().equals(""))return msj4+" Razon Comercial";
            
            mRazon.setText(Helpers.quitarAcento(mRazon.getText().trim()).trim());
            if(mRazon.getText().equals(""))return msj4+" Razon Social";

            try {
                ga=Integer.parseInt(mComision.getText());
            } catch (Exception e) {
                return msj1+"Gasto Administrativo ,"+msj2;
            }
            
            if(!(ga>=0 && ga<=100))return "Error en el Porcentaje del Gasto Administrativo";

            if(mSelBanco.getSelectedIndex()==-1)return msj3+" Banco";
            if(mSelAseguradora.getSelectedIndex()==-1)return msj3+" Aseguradora";
            if(mSelGpoEmpresas.getSelectedIndex()==-1)return msj3+" Grupo de Empresa";
            if(mDireccion.mSelPais.getSelectedIndex()==-1)return msj3+" un Pais";
            if(mDireccion.mSelEstado.getSelectedIndex()==-1)return msj3+" un Estado";
            if(mDireccion.mSelPoblacion.getSelectedIndex()==-1)return msj3+" un Poblacion";
            if(mDireccion.mSelColonia.getSelectedIndex()==-1)return msj3+" un Colonia";
            if(esquemaPago.getSelectedIndex()==-1)return msj3+" un Esquema de Pago";
  
            if(mDireccion==null)return "Hubo algun problema con la direccion";            
            
            mDireccion.mCalle.setText(Helpers.quitarAcento(mDireccion.mCalle.getText().trim()).trim());
            if(mDireccion.mCalle.getText().equals(""))return msj4+" Calle";
            String num1=mDireccion.mNumInt.getText().trim();
            String num2=mDireccion.mNumExt.getText().trim();
            if(num1.equals("")&&num2.equals(""))return "Favor de Escribir un Numero Interior o Exterior";
            
            if(num2.equals("")){
                mDireccion.mNumInt.setText(Helpers.quitarAcento(mDireccion.mNumInt.getText().trim()).trim());
                if(mDireccion.mNumInt.getText().equals(""))return msj4+" Numero Interior";
            }            
            mDireccion.mNumExt.setText(Helpers.quitarAcento(mDireccion.mNumExt.getText().trim()).trim());
            if(num1.equals(""))
                if(mDireccion.mNumExt.getText().equals(""))return msj4+" Numero Exterior";

            try {
                Integer.parseInt(mDireccion.mZip.getText());
            } catch (Exception e) {
                return msj1+"Codigo Postal";
            }

        } catch (Exception e) {
            return "Error no documentado";
        }
        return msj;
    }


    public Direccion encapsulacion(){
        Direccion d=new Direccion();
        try {
            Colonia c=new Colonia();
            c=mDireccion.getColonias().get(mDireccion.mSelColonia.getSelectedIndex());
            d.setdireccionId(mCurrent.getFk_direccionId());
            d.setcalle(mDireccion.mCalle.getText());
            if(mDireccion.mNumInt.getText()==null)
                d.setnumero_interior("");
            else
                d.setnumero_interior(mDireccion.mNumInt.getText());

           if(mDireccion.mNumExt.getText()==null)
                d.setnumero_exterior("");
            else
                d.setnumero_exterior(mDireccion.mNumExt.getText());
            d.settipoDeVia("CA");
            d.setcoloniaId(c.getcoloniaId());
        } catch (Exception e) {
        }
        return d;
    }
 public void longitud(){
        mNombre.setMaximumLength(100);
        mRazon.setMaximumLength(100);
        mNumSocio.setMaximumLength(20);
       // mNumCliente.setMaximumLength(20);
        mRFC.setMaximumLength(13);
        mComision.setMaximumLength(2);
        mDireccion.mCalle.setMaximumLength(50);
        mDireccion.mNumInt.setMaximumLength(10);
        mDireccion.mNumExt.setMaximumLength(10);


    }

 /////////////////////////////////FECHAS DE FACTURACION//////////////////////////////////////
//METODOS PARA CARGA DE CALENDARIOS.
 public ArrayList<CalendarioFacturacion> listado(String fechaStr){
            CalendarioFacturacion cf=new CalendarioFacturacion();
            String fecha[]=fechaStr.split(",");
            for(int i=0;i<fecha.length;i++){
                if(fecha[i]!=null){
                String x=fecha[i];
                x=x.replace("'","").trim();
                if(i!=6){
                    String a[]=x.split("/");
                    x=a[2]+"-"+a[1]+"-"+a[0];
                }
                switch(i){
                    case 0:cf.setDia_limite_aut_fac(x);break;
                    case 1:cf.setDia_gap(x);break;
                    case 2:cf.setDia_dispersion(x);break;
                    case 3:cf.setDia_pago(x);break;
                    case 4:cf.setDia_inicio(x);break;
                    case 5:cf.setDia_fin(x);break;
                    case 6:cf.setDias_a_pagar_periodo(x);break;
                }
                }
            }
            listaFecha.add(cf);
            return listaFecha;
        }

 public void guardarFechas(int empid){
                  DAC_Ext ext=new DAC_Ext();
                    DAC_Insert di=new DAC_Insert();
                        if(listaFecha != null && listaFecha.size()>0){
                                ArrayList<CalendarioFacturacion> listaDelete =new ArrayList<CalendarioFacturacion>();
                                //listaDelete=ext.fechaFacturacion(52, listaFecha);
                                //di.deleteCalFacturacion(listaDelete);
                                boolean res=di.insertarFecha(listaFecha, empid);
                                if(res==true){
                                    listaFecha =new ArrayList<CalendarioFacturacion>();
                                    //fechas.setModel(modeloTabla(listaFecha));
                                    //add(new wAviso("Proceso Correcto", "El Proceso ha sido un exito"));
                                }else{
                                    add(new wAviso("Error","Favor de Corregir Las Fechas"+listaFecha.toString()+empid));
                                }
                        }else{
                                add(new wAviso("Aviso","Proceso generado correctamente"));
                                return;
                         }
 }

 public void verFechas(ActionEvent e){
     FechaFactW=Helpers.Ventana(Color.WHITE,new Extent(1),new Extent(1),new Extent(1000),new Extent(500),false,false,new Extent(0));
                               //FechaFactW=new WindowPane();
                               FechaFactW.setClosable(true);
                               FechaFactW.setTitleHeight(new Extent(25));
                               FechaFactW.setTitle("Fechas de Facturacion Existentes");
                               FechaFactW.setMovable(true);
                               FechaFactW.add(contenedor2());
                               add(FechaFactW);

 }
    private Button Eliminar, Eliminar_t;
    private Table tablaFecha2=Helpers.Tabla();
    private ArrayList<CalendarioFacturacion> listaSinFactura =new ArrayList<CalendarioFacturacion>();
 public ContentPane contenedor2(){
        DAC_Ext ext=new DAC_Ext();
        Empresa emp=new Empresa();

        emp=mCurrent;
        listaSinFactura=ext.fechaFacturacion(emp.getEmpresaId());


        ContentPane cp=new ContentPane();
        Row linea1=new Row();
        Row linea2=new Row();

        SplitPane sp=Helpers.SplitPaneHelper(SplitPane.ORIENTATION_VERTICAL, new Extent(140,Extent.PX), false);
        SplitPane sp2=Helpers.SplitPaneHelper(SplitPane.ORIENTATION_VERTICAL, new Extent(500,Extent.PX), false);
        sp.add(sp);
        sp.add(sp2);
        sp.setBackground(Color.BLUE);
        sp2.setBackground(Color.YELLOW);

        Eliminar=Helpers.Button2("ELIMINAR", new ActionListener(){public void actionPerformed(ActionEvent e) {EliminarFechas(e);}});
        Eliminar_t=Helpers.Button2("ELIMINAR TODO", new ActionListener(){public void actionPerformed(ActionEvent e) {EliminarFechasall(e);}});
        listaSinFactura=arreglo(listaSinFactura);
        tablaFecha2.setModel(modeloTabla(listaSinFactura));
        tablaFecha2.setDefaultRenderer(Object.class,new TableCell());
        tablaFecha2.setDefaultHeaderRenderer(new HeaderTable());
        tablaFecha2.setBorder(new Border(1, Color.BLACK, 1));
        tablaFecha2.setWidth(new Extent(950,Extent.PX));
        tablaFecha2.setInsets(new nextapp.echo2.app.Insets(5));
        tablaFecha2.setSelectionEnabled(true);
        tablaFecha2.setSelectionFont(new Font(Font.ARIAL,1, new Extent(8)));
        tablaFecha2.setSelectionBackground(new Color(220,20,60));
        tablaFecha2.setSelectionForeground(Color.WHITE);
        tablaFecha2.setRolloverEnabled(true);
        tablaFecha2.setRolloverBackground(new Color(240,128,128));
        tablaFecha2.setRolloverForeground(Color.WHITE);

        linea1.add(Eliminar);
        linea1.add(Eliminar_t);
        linea2.add(tablaFecha2);
        linea1.setAlignment(Alignment.ALIGN_CENTER);
        linea2.setAlignment(Alignment.ALIGN_CENTER);

        Column col=new Column();
        col.add(linea1);
        col.add(linea2);
        col.setInsets(new Insets(new Extent(10)));
        col.setCellSpacing(new Extent(10));
        cp.add(col);
        //AccionesFechaSinFact();
        return cp;
    }

 public  ArrayList<CalendarioFacturacion> arreglo(ArrayList<CalendarioFacturacion> listaTotal){
         if(listaTotal.size()>0){
                        ArrayList<CalendarioFacturacion> temp =new ArrayList<CalendarioFacturacion>();
                        SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyy-MM-dd");
                        for(int i=0;i<listaTotal.size();i++){
                                Date fechaFin=null;
                                CalendarioFacturacion cf=new CalendarioFacturacion();
                                cf=(CalendarioFacturacion)listaTotal.get(i);
                                Date fechaActual = new Date();
                                if(!cf.getDia_fin().trim().equals("")){
                                        try {
                                        fechaFin=formatoDelTexto.parse(cf.getDia_fin());
                                        long fact=fechaActual.getTime();
                                        long ffin=fechaFin.getTime();
                                        if(ffin>=fact){
                                                temp.add(cf);
                                        }
                                        } catch (Exception e) {
                                            //WindowPane exc=Ventana(Color.WHITE,new Extent(50),new Extent(50),new Extent(300),new Extent(400),true,true,new Extent(20));
                                            //exc.add(new Label("Error en el archivo Cargado"));
                                            listaTotal.clear();
                                            add(new wAviso("Advertencia", "Error en el archivo de Carga"));
                                            return listaTotal;
                                        }
                                }

                        }
                        listaTotal=temp;
        }

         return listaTotal;
    }


 public DefaultTableModel modeloTabla(ArrayList<CalendarioFacturacion> listaTotal){
        DefaultTableModel dtm=new DefaultTableModel(7,0);
        //String title[]={"Dia Limite para Autorizar","Dia GAP","Dia de Dispersion","Dia de Pago","Dia de Inicio","Dia de Fin","Dias A Pagar"};
        String title[]={"Dia de Inicio","Dia de Fin","Dia Limite para Autorizar","Dia GAP","Dia de Dispersion","Dia de Pago","Dias A Pagar"};
            for(int i=0;i<title.length;i++){
                     dtm.setColumnName(i,title[i]);
            }
        if(listaTotal.size()>=0){
                        ArrayList<CalendarioFacturacion> temp =new ArrayList<CalendarioFacturacion>();
                        SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyy-MM-dd");
                        for(int i=0;i<listaTotal.size();i++){
                                Date fechaFin=null;
                                CalendarioFacturacion cf=new CalendarioFacturacion();
                                cf=(CalendarioFacturacion)listaTotal.get(i);
                                        Object[] o=new Object[7];
                                        o[0]=cf.getDia_inicio();
                                        o[1]=cf.getDia_fin();
                                        o[2]=cf.getDia_limite_aut_fac();
                                        o[3]=cf.getDia_gap();
                                        o[4]=cf.getDia_dispersion();
                                        o[5]=cf.getDia_pago();
                                        o[6]=cf.getDias_a_pagar_periodo();
                                        dtm.addRow(o);
                                        temp.add(cf);

                        }
        }
 else{
            add(new wAviso("error","la lista llega en 0"));
 }
        return dtm;
    }


 public void EliminarFechas(ActionEvent e){
                     CalendarioFacturacion cf=null;
                if(tablaFecha2.getSelectionModel().getMinSelectedIndex()!=-1){
                    cf=new CalendarioFacturacion();
                    try{
                    cf=(CalendarioFacturacion)listaSinFactura.get(tablaFecha2.getSelectionModel().getMinSelectedIndex());
                    }catch(Exception ex){
                        add(new wAviso("ERROR","YA NO EXISTEN MAS REGISTROS"));
                    }

                    DAC_Insert di=new DAC_Insert();cf.getDia_inicio();
                    di.deleteCalFacturacion(cf);
                    DAC_Ext ext=new DAC_Ext();
                    Empresa emp=new Empresa();

                    emp=mCurrent;
                    System.out.println(emp.getEmpresaId());
                    listaSinFactura=ext.fechaFacturacion(emp.getEmpresaId());
                    listaSinFactura=arreglo(listaSinFactura);
                    tablaFecha2.setModel(modeloTabla(listaSinFactura));
                }
                else{
                     add(new wAviso("Error","Favor de Seleccionar una Fecha de Facturacion"));
                     return;
                }
 }

 public void EliminarFechasall(ActionEvent e){
     DAC_Insert di=new DAC_Insert();
     DAC_Ext ext=new DAC_Ext();
     /*di.deleteCalFacturacionall(mCurrent.getEmpresaId());*/


                       /*listaSinFactura=ext.fechaFacturacion(mCurrent.getEmpresaId());
                    listaSinFactura=arreglo(listaSinFactura);
                    tablaFecha2.setModel(modeloTabla(listaSinFactura));*/

                    di.deleteCalFacturacionall(listaSinFactura);
                    listaSinFactura=ext.fechaFacturacion(mCurrent.getEmpresaId());
                    listaSinFactura=arreglo(listaSinFactura);
                    tablaFecha2.setModel(modeloTabla(listaSinFactura));
                }
 //}

}

